package control;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

import service.RequisitoService;
import dto.PercentualRequisitoDTO;
import entity.Requisito;
import entity.Requisito.SituacaoRequisito;
import entity.Requisito.TipoRequisito;

@Named
@SessionScoped
public class ManterRequisitosControl implements Serializable {
	private static final long serialVersionUID = -5382145717647084268L;
	@Inject
	private MenuControl menu;
	
	@EJB
	private RequisitoService service;
	
	private List<Requisito> requisitos;
	private Requisito requisito;
	private Long idRequisito;
	
	private List<PercentualRequisitoDTO> percentual;
	
	
	private TipoRequisito[] tiposRequisito = TipoRequisito.values();
	private SituacaoRequisito[]	situacoes = SituacaoRequisito.values();
	
	private String operacao;
	private static String OP_ALTERAR = "A";
	private static String OP_INCLUIR = "I";
	
	
	public String iniciar() {
		this.requisitos = service.listarRequisitosDoProjeto(menu.getIdProjetoSelecionado());
		
		return "/pages/requisito/listar_requisitos";
	}
	
	public String novo() {
		operacao = OP_INCLUIR;
		requisito = new Requisito();
		return "/pages/requisito/editar_requisito";
	}

	public String incluir() {
		service.incluirRequisito(menu.getIdProjetoSelecionado(), requisito);
		
		FacesContext.getCurrentInstance().addMessage(null, 
				new FacesMessage(FacesMessage.SEVERITY_INFO, "Requisito '" + requisito.getNome() +"' incluído.", ""));
		
		return iniciar();
	}
	
	public String excluir() {
		service.excluirRequisito(idRequisito);
		
		FacesContext.getCurrentInstance().addMessage(null, 
				new FacesMessage(FacesMessage.SEVERITY_INFO, "Requisito excluído.", ""));
		
		return iniciar();
	}
	
	public String obter() {
		operacao = OP_ALTERAR;
		requisito = service.obterRequisito(idRequisito);
		return "/pages/requisito/editar_requisito";
	}
	
	public String alterar() {
		service.alterarRequisito(requisito);
		
		FacesContext.getCurrentInstance().addMessage(null, 
				new FacesMessage(FacesMessage.SEVERITY_INFO, "Requisito '" + requisito.getNome() + "' alterado.", ""));
		
		return iniciar();
	}
	
	public String obterPercentagemRequisito(){
		try {
			percentual = service.obterPercentagemRequisito(requisito);
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		return "/pages/requisito/listar_percentual_requisito_concluido";
	}
	// getters / setters
	public List<Requisito> getRequisitos() {
		return requisitos;
	}

	public Requisito getRequisito() {
		return requisito;
	}
	
	public void setRequisito(Requisito requisito) {
		this.requisito = requisito;
	}

	public TipoRequisito[] getTiposRequisito() {
		return tiposRequisito;
	}

	public SituacaoRequisito[] getSituacoes() {
		return situacoes;
	}
	
	public Long getIdRequisito() {
		return idRequisito;
	}

	public void setIdRequisito(Long idRequisito) {
		this.idRequisito = idRequisito;
	}
	
	public boolean getExibirAlterar() {
		return OP_ALTERAR.equals(operacao);
	}
	
	public boolean getExibirIncluir() {
		return OP_INCLUIR.equals(operacao);
	}

	public List<PercentualRequisitoDTO> getPercentual() {
		return percentual;
	}

	public void setPercentual(List<PercentualRequisitoDTO> percentual) {
		this.percentual = percentual;
	}

}
